#Boa:Dialog:Vista

import wx
import wx.grid
import utiles
import consultasBD
import Mensaje
import Email
import sincronizar_tabla 
import sys
import os

def create(parent):
    return Vista(parent)

[wxID_VISTA, wxID_VISTABTN_IMPRIMIR, wxID_VISTAGRILLA, 
 wxID_VISTANOMBRE_LISTADO, 
] = [wx.NewId() for _init_ctrls in range(4)]

class Vista(wx.Dialog):
    def _init_ctrls(self, prnt):
        # generated method, don't edit
        wx.Dialog.__init__(self, id=wxID_VISTA, name=u'Vista', parent=prnt,
              pos=wx.Point(73, 186), size=wx.Size(875, 481),
              style=wx.DEFAULT_DIALOG_STYLE, title=u'Listado')
        self.SetClientSize(wx.Size(859, 445))

        self.grilla = wx.grid.Grid(id=wxID_VISTAGRILLA, name=u'grilla',
              parent=self, pos=wx.Point(8, 32), size=wx.Size(832, 375),
              style=0)
        self.grilla.Bind(wx.grid.EVT_GRID_CELL_LEFT_DCLICK,
              self.OnGrillaGridCellLeftDclick)

        self.btn_imprimir = wx.Button(id=wxID_VISTABTN_IMPRIMIR,
              label=u'Imprimir', name=u'btn_imprimir', parent=self,
              pos=wx.Point(584, 413), size=wx.Size(85, 27), style=0)
        self.btn_imprimir.Bind(wx.EVT_BUTTON, self.OnBtn_imprimirButton,
              id=wxID_VISTABTN_IMPRIMIR)

        self.nombre_listado = wx.StaticText(id=wxID_VISTANOMBRE_LISTADO,
              label=u'Nombre del listado', name=u'nombre_listado', parent=self,
              pos=wx.Point(8, 8), size=wx.Size(119, 15), style=0)

    def __init__(self, parent, label):
        self._init_ctrls(parent)
        self.padrepadrepadre = parent
        self.sucursal = 1 #self.padrepadrepadre.sucursalNro
        self.titulo = label
        if self.titulo=="Cumpleanos de hoy:" :
            self.btn_imprimir.SetLabel("Enviar EMAILS")
            self.btn_imprimir.Refresh()
        
        if self.titulo=="Cambios De Precios":
            self.cambioprecios()
        self.nombre_listado.SetLabel(label)


    def cambioprecios(self):
        fecha = self.padrepadrepadre.fecha
        fechahasta = fecha[:4]+"-0"+str(int(fecha[:7][5:])- 1)+"-"+fecha[8:]
        
        print fechahasta
        SQL= "SELECT * FROM cambiosprecios WHERE fecha between '%s' AND '%s' ORDER BY IDCAMBIO DESC" % (fechahasta,fecha)
        resultados = consultasBD.ordenCruda(SQL)
        
        self.datos = resultados
        self.columnas = ["IDCambio","PTC    ","CodSussan   ","DESCRIPCION    ","Precio Viejo","Precio Nuevo","Estado", " FECHA " , "S. STA FE", "S. PARANA"]

        cant_columnas = len(self.columnas)
        cant_filas = len(self.datos)
        self.grilla.CreateGrid(cant_filas, cant_columnas)
        #self.grilla.EnableGridLines(False)
        
        
        for x1 in xrange(len(self.datos)):
            for i1 in xrange(len(self.columnas)):
                    self.grilla.SetReadOnly(int(x1),int(i1),True)    
            
        
        # setea nombre de las columnas
        for i in xrange(len(self.columnas)):
            self.grilla.SetColLabelValue(i,self.columnas[i])

        # cargo el contenido de la grilla
        for i, fila in enumerate(resultados):
            
            for j, data in enumerate(fila):
                if j==1:
                    ptc = str(data)
                    SQL = "SELECT stock FROM stock WHERE ptc='%s' AND sucursal=1" % (ptc)
                    print SQL
                    stocksanta = 0
                    result = consultasBD.ordenCrudaDict(SQL)
                    for l in result:
                        stocksanta = result[0]["stock"]
                    
                    SQL = "SELECT stock FROM stock WHERE ptc='%s' AND sucursal=2" % (ptc)
                    print SQL
                    stockparana = 0
                    result = consultasBD.ordenCrudaDict(SQL)
                    for l in result:
                        stockparana = result[0]["stock"]
                    
                    
                    SQL2 = "SELECT P.DESCRI as descri FROM producto_talle_color ptc, productos p WHERE p.codsussan=ptc.codsussan AND ptc.id='%s'" % ptc
                    result = consultasBD.ordenCrudaDict(SQL2)
                    for o in result:
                         descri = result[0]["descri"]
                    
                    
                if j==6:
                    
                    self.grilla.SetCellValue(i,3, str(descri))
                    self.grilla.SetCellValue(i,7, str(data))
                    self.grilla.SetCellValue(i,8, str(stocksanta))
                    self.grilla.SetCellValue(i,9, str(stockparana))
        
                else:
                    self.grilla.SetCellValue(i,j, str(data))
        
        
        
    def cargar_celdas(self, datos, columnas):
        """ carga la grilla principal:
        el argumento 'datos' es una lista que tiene tuplas con todos los datos que
        hay que mostrar en la vista. 'columnas' es una lista con el nombre
        de las columnas ordenados
        """
        import time
        self.datos = datos
        self.columnas = columnas

        cant_columnas = len(columnas)
        cant_filas = len(datos)

        self.grilla.CreateGrid(cant_filas, cant_columnas)
        #self.grilla.EnableGridLines(False)
        
        
        for x1 in xrange(len(datos)):
            for i1 in xrange(len(columnas)):
                    self.grilla.SetReadOnly(int(x1),int(i1),True)    
            
        
        # setea nombre de las columnas
        for i, nombre in enumerate(columnas):
            self.grilla.SetColLabelValue(i, nombre)

        # cargo el contenido de la grilla
        for i, fila in enumerate(datos):
            for j, columna in enumerate(fila):
                if columna == None:
                    columna = 1
                    
                self.grilla.SetCellValue(i,j, str(columna))
                
        print "TEEEERMINO EL FOR", time.time()
        
        #propiedades de las filas y las columnas
        for o in xrange(len(columnas)):
            self.grilla.AutoSizeColumn(o,True)
        
        
    def reporte_html(self, datos, columnas):
        html = open('reporte.html', 'r').read()
        titulo = str(self.titulo)
        cadena_reemplazo = '<table border="1" cellpadding="0" cellspacing="0"><caption>%s</caption><thead>%s</thead><tbody align="left">%s</tbody></table>'

        nombre_columnas = '<tr>'
        for nombre in columnas:
            nombre_columnas += '<td><font size="1"><strong>%s</strong></font></td>' % nombre
        nombre_columnas += '</tr>'

        contenido = ''
        for fila in datos:
            contenido += '<tr>'
            for columna in fila:
                contenido += '<td><font size="1">%s</font></td>' % columna
            contenido += '</tr>'

        cadena_reemplazo = cadena_reemplazo % (titulo, nombre_columnas, contenido)
        html = html.replace('{ % reemplazar % }', cadena_reemplazo)
        archivo_salida = open('reporte_html.html', 'w')
        archivo_salida.write(html)
        archivo_salida.close()
        print html
        os.system("c:\explorer.lnk")

    def OnBtn_imprimirButton(self, event):
        if self.titulo=="Cumpleanos de hoy:" :
            serverName ="smtp.fibertel.com.ar" #
            
            #serverName ="200.42.0.82" #
            #host= "200.42.0.82" # 200.42.0.82
            host= "smtp.fibertel.com.ar" # 200.42.0.82
            user="sussanboutique"
            password="fiber12"
            #6576481 nro de cliente
            
            
            email_from="sussanboutique@gmail.com"
            subject="FELIZ CUMPLE!!"
            html_path= "cumple.html"
            image_path= "logo_sussan_simple.png"
            
            cont=0
            i=0
            for i in xrange(int(self.grilla.GetNumberRows())):
                email_destinatario=str(self.grilla.GetCellValue(i,4))
                nombreCumple = str(self.grilla.GetCellValue(i,1))
                print nombreCumple
                if (email_destinatario != "") :
                    email = Email.Email(user, password, host, 25, email_from, subject,html_path, image_path, nombreCumple)
                    email.load_files(html_path, image_path,nombreCumple)
                    print email_destinatario
                    msg = email.create_msg(email_destinatario)
                    try:
                        email.send_email(email_from, email_destinatario, msg)
                        cont=cont+1
                    finally:
                        pass
                    
            utiles.mensaje(self, "Se enviaron correctamente: "+str(cont))
                
        if self.titulo == "CajaDiaria":
                pass
            
        else:
            self.reporte_html(self.datos, self.columnas)
            event.Skip()


    def OnGrillaGridCellLeftDclick(self, event):
        #hice una busq de producto y estoy haciendo realizando un pedido
        if self.titulo=="Busqueda de Articulos" :
                fil = self.grilla.GetGridCursorRow()
                col = self.grilla.GetGridCursorCol()
                if col==7:#col de sta fe
                    sucDestino = 1 #estoy en parana y lo tienen en santa feestoy en santa fe y lo tienen en parana
                else:
                    sucDestino = 2 #estoy en santa fe y lo tienen en parana
                
                sucActiva = self.padrepadrepadre.padrepadre._sucursal_activa()[0]
                if sucActiva==sucDestino:
                    msg = "Esta seleccionando una cantidad\n de su misma sucursal."
                    utiles.mensaje(self, msg)                        
                    return
                
                self.grilla.SetCellBackgroundColour(fil, col, (0,255,0,255))
                self.grilla.SetCellBackgroundColour(fil, col, (0,255,0,255))
                contenido = self.grilla.GetCellValue(fil, col)
                
                if int(contenido) == 0:
                    msg = "La sucursal destino no tiene Stock\n del Producto selecccionado"
                    utiles.mensaje(self, msg)                        
                    return                    
                
                
                sucActiva = self.padrepadrepadre.padrepadre._sucursal_activa()[0]
                proxInsert = utiles.secuencia(tabla="pedidos", sucursal=int(sucActiva))
                if col==7:#col de sta fe
                    sucDestino = 1 #estoy en parana y lo tienen en santa feestoy en santa fe y lo tienen en parana
                else:
                    sucDestino = 2 #estoy en santa fe y lo tienen en parana
                ptc= self.grilla.GetCellValue(fil, 0)
                cant = 1
                fechapedido= self.padrepadrepadre.padrepadre.fecha
                fecharecibido= ""
                estado = 1
                
                tablaSQL = "pedidos"      


                sql = "INSERT INTO pedidos(idpedido,idsucorigen,idsucdestino,ptc,cant,fechapedido,fecharecibido,estado) VALUES   ('%s','%s','%s','%s','%s','%s','%s','%s')" % (str(proxInsert),str(sucActiva),str(sucDestino),str(ptc),str(cant),str(fechapedido),str(fecharecibido),str(estado))

                print sql
                consultasBD.executa(None,sql)
                
                sincronizar_tabla.addChange(sql=sql)
                consultasBD.commit()
                sincronizar_tabla.syncServerTables(self, ["pedidos"])
                
                mensaje = "Se realizo el Pedido NRO. %s" % str(proxInsert)
                ventana = Mensaje.Mensaje(self,mensaje)
                try:
                    ventana.ShowModal()
                finally:
                    ventana.Destroy()
            
     
